package com.hua.common;


/*
    全局异常处理
 */

import com.hua.entities.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.sql.SQLIntegrityConstraintViolationException;


@Slf4j
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
public class GlobeExeption {

    /**
     * 当我们要用trycatch来捕获异常的时候
     * 我们可以使用trycatch语句，但是如果一旦这种情况变多，
     * 我们的代码就会出现大连的trycatch
     * 所以我们用这个全局捕获异常类来捕获
     *
     * 将有标志RestController，Controller这两个类的方法，如果出现异常进行捕获，
     * @ControllerAdvice(annotations = {RestController.class, Controller.class})
     *
     * 因为我们要返回json数据，所以用这个，resteful风格也可以用这个。RestController = Controller + ResponseBody
     * @ResponseBody
     *
     * @param e
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> getHandle(SQLIntegrityConstraintViolationException e){
        log.info(e.getMessage());
        if(e.getMessage().contains("Duplicate entry")){
            String[] s = e.getMessage().split(" ");
            String s1 = s[2] + "已存在";
            return R.error(s1);
        }
        return R.error("用户名不合法");
    }
    @ExceptionHandler(CustomError.class)
    public R<String> getHandle(RuntimeException e){

        return R.error(e.getMessage());
    }
}
